package org.i1510.spider.utils.spider.parser;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.i1510.common.utils.StringUtils;
import org.i1510.spider.bean.SysSpiderRuleBean;
import org.i1510.spider.utils.spider.model.FetchedPage;
import org.i1510.spider.utils.spider.queue.VisitedSpiderRuleQueue;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * @author Administrator 对于网站http://segmentfault.com/ 的数据匹配
 *         获取http://segmentfault.com/questions/newest?page=1 中每一个链接对应的答案
 */
public class ContentParser2_an {
	/**
	 * @Author Rambo
	 * @Desc：匹配源文件的数据操作
	 * @param fetchedPage
	 *            页面源文件
	 * @param sysSpiderRuleBean
	 *            待取列表
	 * @return TODO
	 * @Version ContentParser2.java,v 1.1 2014-9-30 下午3:01:16
	 */
	public List<Map> parse(FetchedPage fetchedPage,
			SysSpiderRuleBean sysSpiderRuleBean) {
		List<Map> list = new ArrayList<Map>();
		Document doc = Jsoup.parse(fetchedPage.getContent());
		StringBuffer answers = new StringBuffer();
		Map map = new HashMap();
		// 问题描述
		Elements els_qu_item = doc.getElementsByClass("widget-question__item");
		if (els_qu_item != null && els_qu_item.size() >= 1) {
			Elements els_qu = els_qu_item.get(0).getElementsByClass("question");
			map.put("descs", els_qu.get(0).text());
		}
		// 问题答案 多个汇总
		Elements els_an_item = doc.getElementsByClass("widget-answers");
		if (els_an_item != null && els_an_item.size() >= 1) {
			Elements els_article = els_an_item.get(0).getElementsByTag("article");
			for (Element el_article : els_article) {
				Elements els_answer = el_article.getElementsByClass("answer");
				answers.append(";" + els_answer.get(0).text());
			}

		}
		map.put("answer",StringUtils.subStringAfter(answers.toString(), ";", 1));
		answers.delete(0, answers.length());

		list.add(map);

		// 将URL放入已爬取队列
		VisitedSpiderRuleQueue.addElement(sysSpiderRuleBean);
		System.out.println("输出 List：" + list);
		return list;
	}

}
